/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Principals.Constantes;
import Model.Parametro;
import Presenter.UsuarioPresenter;
import Principals.Main;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Transaction;

/**
 *
 * @author walter
 */
public class ParametroDAO {

    public static Parametro getParametroByValorString(String user, String valor) {
        int idUsuario = UsuarioDAO.getIdusuario(user);
        if (idUsuario == -1) {
            return null;
        } else {

            Main.usrSesion.session.beginTransaction();
            Query query = Main.usrSesion.session.createQuery("from Parametro where estado = 1 and valor_string = :valor and id_padre = :idusuario");
            query.setParameter("valor", valor);
            query.setParameter("idusuario", idUsuario);

            Parametro parametro = (Parametro) query.uniqueResult();
            Main.usrSesion.session.getTransaction().commit();
            return parametro;
        }
    }

    public static String insertParametro(Parametro par) {
        try {
            Main.usrSesion.session.beginTransaction();
            Transaction tx = Main.usrSesion.session.getTransaction();
            Main.usrSesion.session.save(par);
            tx.commit();
        } catch (Exception e) {
        } finally {
            UsuarioPresenter.registrarLogUsuario(Main.usr, "parametro", par.getIdParametro() + "->" + par.getNombre(), Constantes.LOG_INSERT);
        }
        return par.getValorString();
    }

    public static List<Parametro> buscarParametro(String nombre) {
        String q = "from Parametro where tipo_parametro = :tipo";

        if (nombre != null) {
            q += " and lower(nombre) LIKE :nombres";
        }

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        query.setParameter("tipo", "VARIABLESISTEMA");

        if (nombre != null) {
            query.setParameter("nombres", "%" + nombre.toLowerCase() + "%");
        }

        Main.usrSesion.session.getTransaction().commit();
        return query.list();
    }

    public static void updateParametro(Parametro parAnt) {
        try {
            Main.usrSesion.session.beginTransaction();
            Transaction tx = Main.usrSesion.session.getTransaction();
            Main.usrSesion.session.update(parAnt);
            tx.commit();
        } catch (Exception e) {
        } finally {
            UsuarioPresenter.registrarLogUsuario(Main.usr, "parametro", parAnt.getIdParametro() + "->" + parAnt.getNombre(), Constantes.LOG_UPDATE);
        }
    }

    public static Parametro cargarParametro(int idVariable) {
        String q = "from Parametro where id_parametro = :id";
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        query.setParameter("id", idVariable);
        Parametro p = (Parametro) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();
        return p;
    }

    public static List<Parametro> getTipoVehiculos() {
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery("from Parametro where tipo_parametro = :tipo");
        query.setParameter("tipo", "TIPOVEHICULO");
        Main.usrSesion.session.getTransaction().commit();
        return query.list();
    }
}
